package command;

/**
 * 命令基座
 */
abstract class Commands{
    abstract void doit();
    abstract void undo();
}

/**
 * 内容被命令执行的对象
 */
class Content{
    String str;

    Content(String str){
        this.str = str;
    }

    @Override
    public String toString() {
        return "Content{" +
                "str='" + str + '\'' +
                '}';
    }
}

/**
 * 具体操作内容的命令
 */
class InsertContent extends Commands{
    Content content;

    public InsertContent(Content content){
        this.content = content;
    }

    @Override
    void doit() {
        this.content.str += "admin";
    }

    @Override
    void undo() {
        this.content.str = this.content.str.replaceAll("admin", "");
    }
}


/**
 * 对一个事物操作可以往回退的操作。
 */
public class Command {
    public static void main(String[] args) {
        System.out.println("Command");

        // 原始对象
        Content content = new Content("ak47");

        // 开始执行命令
        Commands commands = new InsertContent(content);
        commands.doit();
        System.out.println(content);
        commands.undo();
        System.out.println(content);
    }
}
